<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>原型和原型链</title>
	</head>
	<body>
		<script>
			// 			对象可以使用构造函数prototype原型对象的属性和方法，就是因为对象有__proto__原型的存在
			// 每个对象都有__proto__原型的存在

			//// 原型的构造器指向构造函数。

			//原型上添加方法注意的地方 构造器指向构造函数本身

			//Star.prototype = {}给原型重新赋值，此时会丢失构造器，

			//我们需要手动定义构造器，指回构造函数本身
			// 原型的构造器指向构造函数。
			function Animal(name) {
				this.name = name
			}
			let obj = new Animal('小猴')
			console.log(Animal.prototype.constructor === Animal) //true
			console.log(obj.__proto__.constructor === Animal) //true

			//原型上添加方法注意的地方 构造器指向构造函数本身
			function Star(name) {
				this.name = name
			}
			Star.prototype.dance = function () {
				console.log(this.name)
			}
			let geyao = new Star('小花')
			console.log(geyao.__proto__) //{dance: ƒ, constructor: ƒ}
			console.log(geyao.__proto__.constructor) // Star

            //赋值{}
			function Star(name) {
				this.name = name
			}
			Star.prototype = {
				dance: function () {
					console.log(this.name)
				},
			}
			let fangfang = new Star('小红')
			console.log(fangfang.__proto__) //{dance: ƒ}
			console.log(fangfang.__proto__.constructor) //  ƒ Object() { [native code] }
			Star.prototype.constructor = Star
		</script>
	</body>
</html>
